<?php

//Obtendo controlador geral e auxiliar
$config = Config::getInstance();

//Captando operação
$op = @ $_REQUEST['op'];

//Defindo modos de acesso

define('MODE_ADMIN', 1); //Somente administrador tem acesso
define('MODE_LOJA', 2); //Somente operações sobre a loja do funcionário logado pode ser efetuada
define('NO_MODE', 23); //Sem nível de acesso definido (todos podem executar)


//Lista de funções válidas
//Cada item desse array é um outro array contendo: 
//* [Chave] o código da função válida
//* [control] o prefixo do controlador dessa função
//* [function] o nome da função do controlador; 
//* [mode] o modo de acesso (ver constantes de modo de acesso); 
$functions = array(
    
        'add_loca' => array('control' => 'localidade', 'function' => 'addLocalidade', 'mode' => MODE_LOJA) ,
        'del_loca' => array('control' => 'localidade', 'function' => 'removerLocalidade', 'mode' => MODE_LOJA),

        'add_regi' => array('control' => 'regiao', 'function' => 'addRegiao', 'mode' => MODE_LOJA ),
        'del_regi' => array('control' => 'regiao', 'function' => 'removerRegiao', 'mode' => MODE_LOJA),

        'add_rota' => array('control' => 'rota', 'function' => 'addRota', 'mode' => MODE_LOJA),
        'del_rota' => array('control' => 'rota', 'function' => 'removeRota', 'mode' => MODE_LOJA),

        'add_loja' => array('control' => 'loja', 'function' => 'addLoja', 'mode' => MODE_ADMIN),
        'del_loja' => array('control' => 'loja', 'function' => 'removeLoja', 'mode' => MODE_ADMIN),

        'add_func' => array('control' => 'funcionario', 'function' => 'addFuncionario', 'mode' => MODE_ADMIN),
        'del_func' => array('control' => 'funcionario', 'function' => 'removeFuncionario', 'mode' => MODE_ADMIN),  

        'add_clie' => array('control' => 'cliente', 'function' => 'addCliente', 'mode' => NO_MODE),
        'del_clie' => array('control' => 'cliente', 'function' => 'removeCliente', 'mode' => NO_MODE),  

        'add_labo' => array('control' => 'laboratorio', 'function' => 'addLaboratorio', 'mode' => MODE_ADMIN),
        'del_labo' => array('control' => 'laboratorio', 'function' => 'removerLaboratorio', 'mode' => MODE_ADMIN),    

        'add_prod' => array('control' => 'produto', 'function' => 'addProduto', 'mode' => MODE_ADMIN),
        'del_prod' => array('control' => 'produto', 'function' => 'removerProduto', 'mode' => MODE_ADMIN),

        'add_tipo' => array('control' => 'produto', 'function' => 'addTipoProduto', 'mode' => MODE_ADMIN),
        'del_tipo' => array('control' => 'produto', 'function' => 'removerTipoProduto', 'mode' => MODE_ADMIN),

        'add_marc' => array('control' => 'produto', 'function' => 'addMarca', 'mode' => MODE_ADMIN),
        'del_marc' => array('control' => 'produto', 'function' => 'removerMarca', 'mode' => MODE_ADMIN),

        'add_orde' => array('control' => 'ordemServico', 'function' => 'addOS', 'mode' => NO_MODE),
        'del_orde' => array('control' => 'ordemServico', 'function' => 'removerOS', 'mode' => NO_MODE),    

        'add_vend' => array('control' => 'venda', 'function' => 'addVenda', 'mode' => MODE_LOJA),    
        'del_vend' => array('control' => 'venda', 'function' => 'cancelarVenda', 'mode' => MODE_LOJA), 

        'dt_ent_v' => array('control' => 'venda', 'function' => 'alterDataEntrega', 'mode' => NO_MODE),

        'rene_venda' => array('control'=>'venda', 'function' => 'renegociarVenda', 'mode' => NO_MODE)
);

//Verificando existência da função (se $op é válida)
if(!empty($functions[$op])) {
    
    //Obtendo a função válida como objeto
    $function = (object) $functions[$op];
    
    //Verificando o modo de acesso
    switch ($function->mode){
        case MODE_ADMIN: 
            //Restrito ao administradores
            if($_SESSION[SESSION_PERFIL_FUNC] != PERFIL_ADMINISTRADOR){
                $config->failInFunction('Você não tem permissões para essa função');
                $config->redirect('index.php');
            }
            break;
        case MODE_LOJA:
            //Restrito à loja do usuário logado quando ele não um administrador
            if($_SESSION[SESSION_PERFIL_FUNC] != PERFIL_ADMINISTRADOR){
                //Parametro loja da requisição
                $loja = $config->filter('loja');
                //Captando sigla da loja do usuário logado
                $loja_sigla_func = $_SESSION[SESSION_LOJA_SIGLA_FUNC];
                //Captando o identificador da loja do usuário logado
                $loja_id_func = $_SESSION[SESSION_LOJA_FUNC];
                if( strcmp($loja, $loja_id_func) && strcmp($loja, $loja_sigla_func) ) {
                    $config->failInFunction('Essa função está restrita somente a sua loja');
                    $config->redirect('index.php');
                }
            }
            break;
    }
    //Carregando controlador
    $config->loadCurrentController($function->control);
    $controller = $config->currentController;
    $func_name = $function->function;
    //Executando a função
    $controller->$func_name();
}

?>
